home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Tools & Utilities
/
Collection of Tools and Utilities.iso
/
graphic
/
fgdemo10.zip
/
MENU.C
< prev
next >
Wrap
Text File
|
1991-10-02
|
15KB
|
545 lines
/**********************************************************************\
* *
* menu.c -- menu management functions *
* *
\**********************************************************************/
#include "defs.h"
CMD main_menu[] =
{
submenu1, "File", 6, 71, 1, 5,
submenu2, "Video", 72, 150, 2, 0,
submenu3, "Fundamentals", 151, 285, 3, 1,
submenu4, "Display", 286, 377, 4, 2,
submenu5, "Miscellaneous", 378, 513, 5, 3,
submenu6, "Utilities", 514, 605, 0, 4
};
CMD menu1[] =
{
about_fg, "About Fastgraph ", 7, 164, 1, 8,
about_demo, "About This Demo ", 7, 164, 2, 0,
about_tech, "Technical Support ", 7, 164, 3, 1,
about_docs, "Documentation ", 7, 164, 4, 2,
about_site, "Site Licenses ", 7, 164, 5, 3,
about_order, "Order By Phone ", 7, 164, 6, 4,
print_form, "Print Order Form ", 7, 164, 7, 5,
shell, "Shell to DOS ", 7, 164, 8, 6,
exit_program, "Exit ", 7, 164, 0, 7
};
CMD menu2[] =
{
about_modes, "Video Modes ", 73, 210, 1, 4,
auto_detect, "Autodetect ", 73, 210, 2, 0,
physical_pages, "Physical Pages", 73, 210, 3, 1,
virtual_pages, "Virtual Pages ", 73, 210, 4, 2,
coordinates, "Coordinates ", 73, 210, 0, 3
};
CMD menu3[] =
{
do_points, "Points ", 152, 284, 1, 7,
do_lines, "Lines ", 152, 284, 2, 0,
do_rects, "Rectangles ", 152, 284, 3, 1,
do_circles, "Circles ", 152, 284, 4, 2,
do_ellipses, "Ellipses ", 152, 284, 5, 3,
do_text, "Text ", 152, 284, 6, 4,
do_paint, "Region Fill", 152, 284, 7, 5,
do_clip, "Clipping ", 152, 284, 0, 6
};
CMD menu4[] =
{
do_bitmaps, "Bitmaps ", 287, 434, 1, 3,
do_transfer, "Transfer ", 287, 434, 2, 0,
do_scroll, "Scroll ", 287, 434, 3, 1,
view_graphic, "Display a File", 287, 434, 0, 2
};
CMD menu5[] =
{
do_mouse, "Mouse ", 379, 512, 1, 5,
do_joystick, "Joystick ", 379, 512, 2, 0,
do_sound, "Sound ", 379, 512, 3, 1,
do_music, "Music ", 379, 512, 4, 2,
do_editor, "Editor ", 379, 512, 5, 3,
do_histogram, "Histogram", 379, 512, 0, 4
};
CMD menu6[] =
{
about_snapshot, "Snapshot ", 515, 604, 1, 2,
about_clip, "Clip ", 515, 604, 2, 0,
about_convert, "Convert ", 515, 604, 0, 1
};
int mouse_limits[] = {0,72,151,286,378,514,640};
int redraw = TRUE;
int selection = 0;
/**********************************************************************\
* *
* highlight option -- highlight an option on the main menu *
* *
\**********************************************************************/
void highlight_option(n)
{
int y;
y = menu_top + ptsize + 1;
fg_setcolor(0);
fg_rect(main_menu[n].x1,main_menu[n].x2,menu_top,menu_bottom-1);
fg_setcolor(15);
center_pstring(main_menu[n].menu_item,main_menu[n].x1,main_menu[n].x2,y);
}
/**********************************************************************\
* *
* horizontal_menu -- main menu containing submenus *
* *
\**********************************************************************/
horizontal_menu(cmdtab,n,current,foregrnd,backgrnd,hilite_fgnd,hilite_bkgnd)
CMD cmdtab[];
int n, current;
int foregrnd, backgrnd;
int hilite_fgnd, hilite_bkgnd;
{
register int i, k;
int c;
int found, new;
int ymin, ymax;
char l;
if (current >= abs(n))
return(ERR);
ymin = menu_top;
ymax = ymin + ptsize + 1;
fg_mousevis(OFF);
/* set up list of options */
if (n < 0)
{
for (i = 0; i < abs(n); i++)
{
fg_setcolor(backgrnd);
fg_rect(cmdtab[i].x1,cmdtab[i].x2,ymin,ymax);
fg_setcolor(foregrnd);
center_pstring(cmdtab[i].menu_item,cmdtab[i].x1,cmdtab[i].x2,ymax);
}
/* if we're just displaying the menu options, return */
return(OK);
}
/* highlight current option */
i = current;
fg_setcolor(hilite_bkgnd);
fg_rect(cmdtab[i].x1,cmdtab[i].x2,ymin,ymax);
fg_setcolor(hilite_fgnd);
center_pstring(cmdtab[i].menu_item,cmdtab[i].x1,cmdtab[i].x2,ymax);
fg_mousevis(ON);
/* choose an option */
new = current;
fg_setnum(OFF);
flushkey();
while (TRUE)
{
/* activate the corresponding vertical menu */
c = (*cmdtab[i].menu_func)();
/* cycle through choices */
if (c == LEFT_ARROW || c == BS)
new = cmdtab[i].prev;
else if (c == RIGHT_ARROW || c == SPACEBAR)
new = cmdtab[i].next;
else if (c >= 0 && c <= n)
new = c;
else if (c == ESC)
{
exit_program();
return(i);
}
else if (isalpha(c))
{
c = tolower(c);
found = FALSE;
for (k = i+1; k < n; k++)
{
l = first_nonblank(cmdtab[k].menu_item);
if (c == tolower((int)l))
{
found = TRUE;
break;
}
}
if (!found)
{
for (k = 0; k <= i; k++)
{
l = first_nonblank(cmdtab[k].menu_item);
if (c == (char)tolower((int)l))
{
found = TRUE;
break;
}
}
}
if (found)
new = k;
else
return(i);
}
else
return(i);
if (i != new)
{
/* unmark previous option */
fg_mousevis(OFF);
fg_setcolor(backgrnd);
fg_rect(cmdtab[i].x1,cmdtab[i].x2,ymin,ymax);
fg_setcolor(foregrnd);
center_pstring(cmdtab[i].menu_item,cmdtab[i].x1,cmdtab[i].x2,ymax);
/* mark new option */
i = new;
fg_setcolor(hilite_bkgnd);
fg_rect(cmdtab[i].x1,cmdtab[i].x2,ymin,ymax);
fg_setcolor(hilite_fgnd);
center_pstring(cmdtab[i].menu_item,cmdtab[i].x1,cmdtab[i].x2,ymax);
fg_mousevis(ON);
}
}
}
/**********************************************************************\
* *
* submenus *
* *
\**********************************************************************/
submenu1()
{
return(vertical_menu(menu1,0,9,0,15,15,0));
}
submenu2()
{
return(vertical_menu(menu2,1,5,0,15,15,0));
}
submenu3()
{
return(vertical_menu(menu3,2,8,0,15,15,0));
}
submenu4()
{
return(vertical_menu(menu4,3,4,0,15,15,0));
}
submenu5()
{
return(vertical_menu(menu5,4,6,0,15,15,0));
}
submenu6()
{
return(vertical_menu(menu6,5,3,0,15,15,0));
}
/**********************************************************************\
* *
* vertical_menu -- submenu off main menu *
* *
\**********************************************************************/
vertical_menu(cmdtab,index,n,foregrnd,backgrnd,hilite_fgnd,hilite_bkgnd)
CMD cmdtab[];
int index;
int n;
int foregrnd, backgrnd;
int hilite_fgnd, hilite_bkgnd;
{
register int i, j, k;
int found, new;
int height;
int left, right;
int string_x;
int x1, x2, y1, y2;
int ymin, ymax;
in